{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch, os\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "import torchvision.datasets as datasets\n",
    "import torch.utils.data as data\n",
    "import torchvision.transforms as transforms\n",
    "import torchvision.models as models\n",
    "from train_model import train_model\n",
    "from test_model import test_model\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_dir = 'tiny-imagenet-200/'\n",
    "num_workers = {'train' : 100,'val'   : 0,'test'  : 0}\n",
    "data_transforms = {\n",
    "    'train': transforms.Compose([\n",
    "        transforms.RandomRotation(20),\n",
    "        transforms.RandomHorizontalFlip(0.5),\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize([0.4802, 0.4481, 0.3975], [0.2302, 0.2265, 0.2262]),\n",
    "    ]),\n",
    "    'val': transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize([0.4802, 0.4481, 0.3975], [0.2302, 0.2265, 0.2262]),\n",
    "    ]),\n",
    "    'test': transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize([0.4802, 0.4481, 0.3975], [0.2302, 0.2265, 0.2262]),\n",
    "    ])\n",
    "}\n",
    "image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x), data_transforms[x]) \n",
    "                  for x in ['train', 'val','test']}\n",
    "dataloaders = {x: data.DataLoader(image_datasets[x], batch_size=100, shuffle=True, num_workers=num_workers[x])\n",
    "                  for x in ['train', 'val', 'test']}\n",
    "dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'val', 'test']}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Load Resnet18\n",
    "model_ft = models.resnet18()\n",
    "#Finetune Final few layers to adjust for tiny imagenet input\n",
    "model_ft.conv1 = nn.Conv2d(3,64, kernel_size=(3,3), stride=(1,1), padding=(1,1), bias=False)\n",
    "model_ft.maxpool = nn.Sequential()\n",
    "model_ft.avgpool = nn.AdaptiveAvgPool2d(1)\n",
    "model_ft.fc.out_features = 200\n",
    "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n",
    "model_ft = model_ft.to(device)\n",
    "\n",
    "pretrained_dict = torch.load('./models/224/model_18_epoch.pt')\n",
    "model_ft_dict = model_ft.state_dict()\n",
    "first_layer_weight = model_ft_dict['conv1.weight']\n",
    "pretrained_dict = {b[0]:b[1] for a,b in zip(model_ft_dict.items(), pretrained_dict.items()) if a[1].size() == b[1].size()}\n",
    "model_ft_dict.update(pretrained_dict) \n",
    "model_ft.load_state_dict(model_ft_dict)\n",
    "\n",
    "#Loss Function\n",
    "criterion = nn.CrossEntropyLoss()\n",
    "# Observe that all parameters are being optimized\n",
    "optimizer_ft = optim.SGD(model_ft.parameters(), lr=0.001, momentum=0.9)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x576 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Loss: 0.2343 Acc: 0.9430\n",
      "Val Loss: 1.4338 Acc: 0.6810\n",
      "\n",
      "Training complete in 53m 42s\n",
      "Best Validation Accuracy: 0.6846, Epoch: 12\n"
     ]
    }
   ],
   "source": [
    "#Train\n",
    "train_model(model_ft, dataloaders, dataset_sizes, criterion, optimizer_ft, num_epochs=20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# model_ft.load_state_dict(torch.load('./models/model_6_epoch.pt'))\n",
    "# #Test\n",
    "# test_model(model_ft, dataloaders, dataset_sizes, criterion, optimizer_ft)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
